#!/bin/bash

# libnl RISC-V 64 交叉编译脚本
# 注意：此脚本需要在WSL(Linux子系统)或Linux环境下运行
# 编译 RISC-V 64 架构的 libnl 库

echo "开始交叉编译 libnl (RISC-V 64) ..."

# 设置变量
LIB_VERSION="3.7.0"
LIB_NAME="libnl-$LIB_VERSION"
TARBALL="$LIB_NAME.tar.gz"
# 兼容Windows路径处理
CROSS_COMPILE="riscv64-linux-gnu-"
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
OUTPUT_DIR="$SCRIPT_DIR/output_riscv64"

# 设置交叉编译器
# 请根据实际情况修改交叉编译器路径
CC="${CROSS_COMPILE}gcc"
CXX="${CROSS_COMPILE}g++"
AR="${CROSS_COMPILE}ar"
RANLIB="${CROSS_COMPILE}ranlib"
STRIP="${CROSS_COMPILE}strip"

# 创建输出目录
mkdir -p "$OUTPUT_DIR"

# 下载源码
if [ ! -f "$TARBALL" ]; then
    echo "下载 libnl-$LIB_VERSION 源码..."
    # 尝试从GitHub下载
    wget -c "https://github.com/thom311/libnl/releases/download/libnl3_7_0/$TARBALL" -O "$TARBALL"
    if [ $? -ne 0 ]; then
        echo "备用下载..."
        # 尝试从kernel.org下载
        wget -c "https://www.kernel.org/pub/linux/libs/netlink/$TARBALL" -O "$TARBALL"
        if [ $? -ne 0 ]; then
            # 最后尝试原始URL
            wget -c "https://www.infradead.org/~tgr/libnl/files/$TARBALL" -O "$TARBALL"
            if [ $? -ne 0 ]; then
                echo "下载失败，请检查网络连接或手动下载$TARBALL到当前目录"
                exit 1
            fi
        fi
    fi
fi

# 解压源码
if [ ! -d "$LIB_NAME" ]; then
    echo "解压源码..."
    tar -xzf "$TARBALL"
    if [ $? -ne 0 ]; then
        echo "解压失败，请检查压缩包是否完整"
        exit 1
    fi
fi

# 进入源码目录
cd "$LIB_NAME"

# 清理之前的编译
make clean 2>/dev/null || true
make distclean 2>/dev/null || true

# 应用可能需要的补丁（可选）
# 例如：patch -p1 < ../patches/libnl-fix.patch

# 设置环境变量
export CC=$CC
export CXX=$CXX
export AR=$AR
export RANLIB=$RANLIB
export STRIP=$STRIP

# 配置
./configure \
    --prefix="$OUTPUT_DIR" \
    --host=riscv64-linux-gnu \
    --build=x86_64-linux-gnu \
    --enable-shared \
    --enable-static \
    --disable-debug \
    --with-pic \
    --disable-pthread

if [ $? -ne 0 ]; then
    echo "配置失败，请检查交叉编译器是否正确安装"
    exit 1
fi

# 编译
echo "编译中..."
make -j$(nproc)
if [ $? -ne 0 ]; then
    echo "编译失败"
    exit 1
fi

# 安装
echo "安装中..."
make install
if [ $? -ne 0 ]; then
    echo "安装失败"
    exit 1
fi

# 优化库文件（可选）
echo "优化库文件..."
find $OUTPUT_DIR/lib -name "*.so*" -exec $STRIP {} \;
find $OUTPUT_DIR/lib -name "*.a" -exec $STRIP --strip-debug {} \;

# 返回脚本目录
cd "$SCRIPT_DIR"

# 创建 .gitignore 文件（如果不存在）
if [ ! -f ".gitignore" ]; then
    echo "创建 .gitignore 文件..."
    cat > .gitignore << EOF
*.tar.gz
*.tar.bz2
*.tar.xz
*.zip
$LIB_NAME/
output/
output_riscv64/
*.log
EOF
fi

echo "libnl-$LIB_VERSION RISC-V 64 交叉编译完成！"
echo "安装目录: $OUTPUT_DIR"
echo "头文件: $OUTPUT_DIR/include"
echo "库文件: $OUTPUT_DIR/lib"
echo "注意: 请确保交叉编译器路径正确设置"